═EMORY LOCATION (BYTE) 783 IS THE ╙TATUS ╥EGISTER CALLED .╨ AND IT HAS, JUST AS EVERY OTHER BYTE, 8 BITS THAT SERVE HERE AS INDICATORS AND ARE CALLED "FLAGS". ╞OR EXAMPLES THE ├ARRY FLAG (├) HAS VALUE 1; PEEK(783)AND1 RESULTS IN 0 IF ├ IS CLEAR, OR 1 IF SET. ╘HE ┌ERO FLAG (┌) HAS VALUE 2; PEEK(783)AND2 RESULTS IN 0 IF ┌ IS CLEAR, OR 2 IF SET; AND THE ╬EGATIVE FLAG (╬) HAS VALUE 128, WITH PEEK(783)AND128 RESULTING IN 0 IF ╬ IS CLEAR, OR 128 IF SET. ╘HESE FLAGS ARE VERY IMPORTANT IN MACHINE-LANGUAGE OPERATIONS.
═ACHINE LANGUAGE OPERATIONS ARE VERY FAST, AND HERE IS A PROGRAM TO SHOW JUST HOW MUCH FASTER THEY ARE THAN ┬┴╙╔├ WHILE COUNTING AND STORING A GIVEN VALUE INTO A GIVEN BYTE (MEMORY LOCATION).
0 REM" ╙PEED DIFFERENCE
2 PRINT C╚(14)C╚(144)
10 REM" ┼XAMPLE: ╠OADING 123 INTO MEMORY LOCATION 251 20X256=5120 TIMES
20 PRINT"╨LEASE ╫┴╔╘ ABOUT 45 SECONDS!
21 TI$="000000":FORI=1 TO 5120:POKE251,123:NEXT:T=TI
22 PRINT T"JIFFIES TO LOAD 123 INTO 251 20X256=5120 TIMES, USING ┬┴╙╔├
30 FORI=820 TO 1023:READ A:IF A>255 THEN 40
31 POKE I,A: NEXT: STOP
32 DATA 169,123, 162,0, 160,0, 133,251, 232, 208,251
33 DATA 200, 192,21, 208,246, 96
40 TI$= "000000":SYS 820: T=TI
41 PRINT T"JIFFIES TO LOAD 123 INTO 251 5120 TIMES VIA ═ACHINE ╠ANGUAGE":PRINT
42 PRINT " ╘HERE ARE A TOTAL OF 2 TO THE POWER OF 16=65536 MEMORY LOCATIONS. ";
43 PRINT "AND EACH 256 IS SAID TO BE ON A PAGE, 0 TO 255. ";
44 PRINT "251, BEING BELOW 256, IS ON PAGE ZERO. ":PRINT
50 PRINT "╧PERATIONS INVOLVING PAGE ZERO ARE FASTER THAN LOCATIONS 256-65535.
51 PRINT " ╬OW COMPARING THE SPEEDS OF LOADING 123 INTO 12345, 5120 TIMES:
100 REM " 123 INTO 12345, 5120 TIMES USING ┬┴╙╔├:
110 PRINT " ╨LEASE ╫┴╔╘ ABOUT 57 SECONDS!
120 TI$="000000":FOR I=1 TO 5120: POKE 12345,123: NEXT :T=TI
121 PRINT "╔T TOOK"T"JIFFIES TO LOAD 123 INTO 12345 VIA ┬┴╙╔├ 5120 TIMES.
211 PRINT "═ACHINE LANGUAGE: WE GET .╪ TO GO TO 256 39 ";
212 PRINT "TIMES, AND THEN COUNT 16 MORE.
220 DATA 162,0, 160,0, 232, 208,253
221 DATA 200, 192,40, 208,248
222 DATA 232, 224,17, 208,251, 96, 999
230 TI$="000000":SYS855:T=TI
231 PRINT "╒SING MACHINE LANGUAGE,IT ONLY TOOK"T"JIFFIES.
LINE 2: ├HARACTER STRING 14 SETS ╒PPERCASE/LOWER CASE TEXT MODE (NOT UPPER CASE/GRAPHICS), AND C╚(144) SETS THE TEXT COLOUR TO BLACK.
╠INE 21: ╘HE ELAPSED TIME CAN BE MEASURED IN JIFFIES; THERE ARE 60 JIFFIES IN EACH SECOND. ╘HE RESERVED VARIABLE TI IS USED BY ┬┴╙╔├ TO COUNT JIFFIES. ╙ETTING TI$ TO ALL ZEROS ALSO SETS TI TO ZERO.
╠INES 30 AND 31 LOAD THE MACHINE LANGUAGE DATA STATEMENTS INTO WHATEVER IS NEEDED INTO MEMORY STARTING AT 820.
╠INES 32 AND 33 CONTAIN THE MACHINE LANGUAGE TO STORE THE NUMBER 123 INTO MEMORY LOCATION 251 5120 TIMES. 169 IS THE OP-CODE TO LOAD THE NUMBER FOLLOWING THE OP-CODE, CALLED AN OPERAND, HERE 123, INTO THE ACCUMULATOR (.┴, INTO MEMORY LOCATION 780) AND ALSO, MAYBE, SET A FLAG IN THE STATUS REGISTER (.╨ AT 783). ╘HIS DEPENDS ON THE OPERAND NUMBER GETTING LOADED INTO .┴, HERE 123. ╔F THE NUMBER IS ZERO, THEN THE ZERO FLAG (┌) IS SET, MEANING THAT BIT 1 (VALUE 2) OF 783 IS SET (TO 1). ╔F THE OPERAND IS GREATER THAN 128 (THE MAXIMUM CONTENT OF BYTES IS 255) THEN THE NEGATIVE FLAG (╬), BIT 7 OF 783, VALUE 128, IS SET. 123 IS NEITHER, AND BITS 1 AND 7 OF .╨ ARE BOTH CLEAR, ZERO.
╘HE NEXT OP-CODE IS 162 (LDX), AND ITS OPERAND IS ZERO. 162 (STX) LOADS THE OPERAND INTO REGISTER .╪ (LOCATION 781) AND, IF REQUIRED, SETS THE ┌ OR ╬ FLAG; THE OPERAND HERE BEING ZERO, THE ┌ FLAG WILL BE SET, WHILE THE ╬ FLAG WILL BE CLEAR.
╬EXT, (STY) 160 0, LOADS ZERO INTO .┘ (LOCATION 782), AND AGAIN THE ┌ FLAG IS SET.
╬EXT, (STA) 133 251 STORES INTO 251 WHATEVER IS IN .┴ (HERE 123) FOR THE FIRST TIME. 133 NEVER SETS ANY FLAGS.
╬EXT, (INX) 232 WHICH NEEDS NO OPERAND INCREMENTS .╪ (ADDS 1 TO ITS VALUE, BUT AFTER 255 COMES ZERO AGAIN) AND THEN, DEPENDING ON THE INCREMENTED VALUE OF .╪ MAY SET THE EITHER THE ┌ OR ╬ FLAGS, OR NEITHER. ╚ERE WE NOW HAVE 1 IN .╪ WITH THE ┌ AND ╬ FLAGS BOTH BEING CLEAR (=0).
╘HE NEXT OPCODE, (BNE=BRANCH IF NOT EQUAL OR NOT ZERO) 208 HAS ONE VERY IMPORTANT OPERAND. ┬ECAUSE IN THIS EXAMPLE THE ┌ FLAG IS CLEAR THERE WILL BE A BRANCH, AND THE OPERAND WILL DETERMINE WHERE TO. ╫E WANT TO GO BACK TO OP-CODE 133 FROM THE 208 WHERE WE ARE NOW. ├OUNTING BACK IN THE PROGRAM, STARTING WITH 254, WE HAVE 208=254, 232=253, 251=252, 133, THE TARGET,=251. ╘HEREFORE WE SET THE OPERAND OF 208 TO 251 TO COMPLETE THE LOOP BACK TO 133. ┴GAIN AND AGAIN THE CONTENT OF .┴ WILL BE STORED INTO 251 UNTIL, AFTER THE 256TH TIME, 251 HAS BEEN INCREMENTED TO ZERO, AND THE ┌ FLAG HAS BEEN SET THEREFORE. ╘HAT CHANGES 208 TO NO BRANCH, TO (INY) 200 WHICH HAS NO OPERAND, BUT MAY SET EITHER THE ┌ OR THE ╬ FLAG, DEPENDING ON THE CONTENT OF.┘
╚ERE .┘ IS NOW 1, BUT WE NEED IT TO GO TO 21 AT WHICH POINT .╪ HAS ALREADY COUNTED 20X256=5120 TIMES AS REQUIRED IN THIS EXAMPLE. ╧P-CODE 192 (CPY) COMPARES .┘ WITH THE CONTENT OF THE OPERAND OF 192, HERE 21, AND SETS DEPENDING ON THE CONTENT OF .┘ THE ╬, ┌, OR ├ (=CARRY) FLAGS. ┴S SOON AS .┘ REACHES 21 THE .┌ FLAG IS SET, AND THE NEXT OP-CODE, 208, NO LONGER BRANCHES BACK TO 133, BUT CARRIES ON TO THE NEXT OP-CODE, 96, WHICH RETURNS TO ┬┴╙╔├ AND RE-ENABLES THE KEYBOARD. ╘HE OPERAND OF THE 208 IS ARRIVED AT BY COUNTING BACK TO 133 FROM 254 AS BEFORE: 208=254, 21=253, 192=252, 200=251, 251=250, 208=249, 232=248, 251=247, AND THE TARGET 133=246. ═OVING BACK TO A TARGET RESULTS IN A COUNTBACK FROM 254, WHILE COUNTING FORWARD TO A TARGET RESULTS IN THE NUMBER OF SKIPPS.